/***
 * @Description: 这是整个协议栈的系统定义文件也是系统函数曝光的头文件
 * @Author: Liverpool
 * @Date: 2024-03-02 20:51:26
 * @LastEditTime: 2024-03-02 20:52:13
 * @LastEditors: Liverpool
 */
#ifndef SYSTEM_H
#define SYSTEM_H

#include "net_plat.h"

sys_sem_t sys_sem_create(int init_count);
void sys_sem_free(sys_sem_t sem);
int sys_sem_wait(sys_sem_t sem, uint32_t ms);
void sys_sem_notify(sys_sem_t sem);

// 互斥信号量：由具体平台实现
sys_mutex_t sys_mutex_create(void);
void sys_mutex_free(sys_mutex_t mutex);
void sys_mutex_lock(sys_mutex_t mutex);
void sys_mutex_unlock(sys_mutex_t mutex);
int sys_mutex_is_valid(sys_mutex_t mutex);

// 线程相关：由具体平台实现
typedef void (*sys_thread_func_t)(void *arg);
sys_thread_t sys_thread_create(sys_thread_func_t entry, void *arg);
void sys_thread_exit(int error);
void sys_sleep(int ms);
sys_thread_t sys_thread_self(void);

void sys_plat_init(void);
// 协议栈时间相关功能
void sys_time_curr(net_time_t *time);
int sys_time_goes(net_time_t *pre);
#endif // !SYSTEM_H